package com.it.a_jichu.c_运算符;

/*
 * 运算符
 * 【说明】：运算符是一种特殊的符号，用以表示数据的运算、赋值和比较等。
 *         是对字面量或者变量进行操作的符号
 * 【分类】：算术运算符、赋值运算符、比较(或关系)运算符、逻辑运算符、位运算符、条件运算符、Lambda运算符
 */
public class main {
    public static void main(String[] args) {
        /**
         * 算术运算符：+    -    *    /    %    ++    --
         */
        int a = 10, b = 20;
        System.out.println(a + b);
        System.out.println(a++);// 后置自增(先运算、后自增)
        System.out.println(++a);// 前置自增(先自增、后运算)


        /**
         * 赋值运算符：=    +=    -=    *=    /=    %=    >>=   <<=    >>>=    &=    |=   ^=
         * 【说明】：
         *          1、当 = 两侧数据类型不一致时，可以使用自动类型转换或使用强制类型转换原则进行处理
         *          2、支持连续赋值
         *          3、扩展赋值运算符： +=、 -=、*=、 /=、%=
         */
        int c = 10; // 常规赋值
        c += 20; // 简写
        int d = 10, e = 20, f = 30; // 连续赋值
        // 不同类型 使用赋值运算符
        byte b1 = 10;
        // b1 = b1 + 5;会报错 应该写为 b1 = (byte)(bi + 5)
        b1 = (byte) (b1 + 5);


        /**
         * 比较运算符：> （大于）   >=（大于等于）    <（小于等于）    <=（小于等于）    ==（等于）    !=（不等于）
         */
        System.out.println(a > b); // false


        /**
         * 逻辑运算符： ^    !    &&    ||
         * 【使用规则】
         *      逻辑与 &&
         *          &&：当符号左右两边布尔值都是true时，结果才能为true。否则，为false。
         *      逻辑或 ||
         *          当符号两边布尔值有一边为true时，结果为true。当两边都为false时，结果为false
         *      逻辑非 ！
         *          当变量布尔值为true时，结果为false。当变量布尔值为false时，结果为true
         *      异或 ^
         *          当符号左右两边布尔值不同时，结果为true。当两边布尔值相同时，结果为false
         */


        /**
         * 条件运算符
         * 【语法规范】：(条件表达式) ?  表达式1 : 表达式2
         * 【注意事项】：
         *          1、接收结果变量的数据类型 必须和返回的结果的变量 类型一致
         *          2、表达式1 和 表达式2 需要时相同类型的 或者是能兼容的类型
         */
        // 如果返回的是一个 字符串  则需要 String 声明的变量接受
        String info = (a >= 18) ? "成年人" : "未成年人";
        System.out.println(info);


        /**
         * 运算符优先级
         *   1、括号				()、[]、{}
         *   2、正负号			+、-
         *   3、单元运算符		++、--、~、！
         *   4、乘法、除法、求余	*、/、%
         *   5、加法、减法		+、-
         *   6、移位运算符		<<、>>、>>>
         *   7、关系运算符		<、<=、>=、>、instanceof
         *   8、等价运算符		==、!=
         *   9、按位与			&
         *   10、按位异或			^
         *   11、按位或			|
         *   12、条件与			&&
         *   13、条件或			||
         *   14、三元运算符		? :
         *   15、赋值运算符		=、+=、-=、*=、/=、%=
         *   16、位赋值运算符		&=、|=、<<=、>>=、>>>=
         */
    }
}
